/*
～取反运算符：
x=0x17对应的16进制：0x17
y = ~x对应的16进制：0xe8

^异或运算符：
0x17对应的16进制：0x17
0173对应的16进制：0x17
0x17 ^ 0173对应的16进制: 0x30

^按位异或的应用，可以原地交换两个数：
原先两个值分别为：10,20
现在两个值分别为：20,10

<<左移运算符:
0xe4左移三位后的16进制数为：0x20
<<右移运算符:
0xe4右移三位后的16进制数为：0x1c
*/

#include<stdio.h>
int main(){
	unsigned char x = 0x17,y;
	y = ~x;
	printf("～取反运算符：\n");
	printf("x=0x17对应的16进制：%#x\n",x);
	printf("y = ~x对应的16进制：%#x\n\n",y);
	
	printf("^异或运算符：\n");
	unsigned char a = 75,b=0173,c;
	c = a ^ b;
	printf("0x17对应的16进制：%#x\n",x);
	printf("0173对应的16进制：%#x\n",x);
	printf("0x17 ^ 0173对应的16进制: %#x\n\n",c);
	
	printf("^按位异或的应用，可以原地交换两个数：\n");
	int aa = 10;
	int bb = 20;
	printf("原先两个值分别为：%d,%d\n",aa,bb);
	aa = aa ^ bb;
	bb = aa ^ bb;
	aa = aa ^ bb;
	printf("现在两个值分别为：%d,%d\n\n",aa,bb);
	
	printf("<<左移运算符:\n");
	unsigned char h = 0xe4,j;
	j = h << 3;
	printf("0xe4左移三位后的16进制数为：%#x\n",j); 
	
	printf("<<右移运算符:\n");
	unsigned char k = 0xe4,l;
	l = k >> 3;
	printf("0xe4右移三位后的16进制数为：%#x\n",l); 
	return 0;
}
